/*
 * CS_READ_MAIL_DETAIL.cpp
 *
 *  Created on: 2013. 5. 21.
 *      Author: the2
 */

#include "../../Command.h"
#include "../../User.h"
#include "../../NLogic/MailBox.h"

namespace ProjectZ { namespace NCommand {

void Command::CS_READ_MAIL_DETAIL(User * pUser, ::Network::Packet * pPacket)
{
/*	//받은 편지 상세 내용
	CS_READ_MAIL_DETAIL			0x1206
	{
		u64				u64mail_seq;					// 읽을 편지 일련번호
	}

	//받은 편지 상세 내용 (젠이나 골드는 어떻게 하지?? => Detail요청과 동시에 수수.)
	SC_READ_MAIL_DETAIL			0x1207
	{
		s16 			s16ack;	 						// 1: 성공,  -1: 실패
		u64				u64mail_seq;
		u8				u8is_gift;						// 0:받을 선물 없음, 1:골드 존재, 2:젠 존재, 4:아이템 존재
		u64				u64item_seq;					// 아이템 seq
		u8				u8bag_type;
		u16				u16item_count;					// 아이템 개수.
		u32				u32zen;							// 젠 (0 : 없음)
		u32				u32gold;						// 골드	(0 : 없음)
		u32				u32mail_date;					// 편지 받은 날짜(unix timestamp)
	}*/


	PREPARE_PACKET;

	uint64_t mailSeq = 0;

	*pPacket >> mailSeq;

	NLogic::MailBox * pMailBox	= pUser->GetMailBox();
	if (NULL == pMailBox)
	{
		DEBUGLOG("CS_READ_MAIL_DETAIL : pMailBox is NULL!!");
		return;
	}

	NLogic::MailBox::Mail * pMail = pMailBox->GetMailData(mailSeq);

	if (NULL == pMail)
	{
		DEBUGLOG("CS_READ_MAIL_DETAIL : pMail is NULL!! mailSeq=%lld", mailSeq);
		return;
	}

	::Network::Packet * pAck = ::Network::GETPACKETPOOL()->SEND_NEW();

	*pAck << static_cast<int16_t>(ACK_OK);
	*pAck << pMail->GetMailSeq();
	*pAck << static_cast<uint8_t>(pMail->GetData().gift_status);
	*pAck << pMail->GetData().zen;
	*pAck << pMail->GetData().gold;
	*pAck << static_cast<uint32_t>(pMail->GetData().send_date);
	pMail->WriteToItemPacket(pAck);

	pAck->MakePacket(CMD_SC_READ_MAIL_DETAIL);
	pUser->Send(pAck);

	// 메일을 읽음 상태로 변경
	pMail->UpdateReadStatusDatabaseMail();
}

} /*NCommand*/ } /*ProjectZ*/
